package main

import "fmt"

/**
通过channel可以实现两个goroutine之间的通信。

创建一个channel， make(chan TYPE {, NUM}) , TYPE指的是channel中传输的数据类型，第二个参数是可选的，指的是channel的容量大小。

向channel传入数据， CHAN <- DATA , CHAN 指的是目的channel即收集数据的一方， DATA 则是要传的数据。

从channel读取数据， DATA := <-CHAN ，和向channel传入数据相反，在数据输送箭头的右侧的是channel，形象地展现了数据从‘隧道’流出到变量里。
*/
func main() {
	c := make(chan int)
	quit := make(chan int)
	go func() {
		for i := 0; i < 10; i++ {
			fmt.Println(<-c)
		}
		quit <- 0
	}()

	fibonacii1(c, quit)
}

func fibonacii1(c chan int, quit chan int) {
	x, y := 1, 1
	for {
		select {
		case c <- x:
			x = y
			y = x + y
		case <-quit:
			fmt.Println("quit....")
			return
		}
	}
}
